package com.huawei.basic.listener;

import com.huawei.basic.service.IPermissionScanService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
@Slf4j
public class PermissionScanListener implements ServletContextListener {
    @Autowired
    private IPermissionScanService permissionScanService;

    //Spring容器初始化完成立马执行
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //由于listenter会直接阻塞主进程，影响项目的启动
        //如果我们的业务逻辑很耗时，那么整个项目启动事件就会变得很长

        //所以，我们这里应该开启异步线程执行扫码注解加权限
        new Thread(new Runnable() {
            @Override
            public void run() {
                //1.扫描所有的controller中打了PreAuthorize 注解的方法
                //2.将数据保存到permission
                log.info("开始扫描注解加权限");
                permissionScanService.scan();
                log.info("结束扫描注解加权限");
            }
        }).start();
    }

    //Spring容器摧毁的时候执行
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}
